home *** CD-ROM | disk | FTP | other *** search
- #include <asm.h>
- #include "ProcessorTypes.h"
- #include "Registers.h"
- #include "Modes.h"
- #include "Memory.h"
-
- #define EA d0
- #define PC d1
- #define X d2
- #define Y d3
- #define A d4
- #define FL d5
- #define TD1 d6
- #define TD2 d7
-
- #define MEM a0
- #define TA1 a1
- #define TA2 a2
- #define EAA a3
-
- #define BYTEAT(addr, store) \
- moveq #0, EA \
- move.w addr, EA \
- lsl.l #2, EA \
- move.l (MEM, EA.l), EAA \
- move.b (EAA), store \
-
- #define WORDAT(addr, store) \
- moveq #0, EA \
- move.w addr, EA \
- lsl.l #2, EA \
- movea.l (MEM, EA.l), EAA \
- move.b (EAA)+, store \
- lsl.w #8, store \
- or.b (EAA), store
-
- #define ZERO \
- moveq #0, TD1 \
- BYTEAT(PC, TD1)
-
- #define ZEROX \
- moveq #0, TD1 \
- BYTEAT(PC, TD1) \
- add.b X, TD1
-
- #define ZEROY \
- moveq #0, TD1 \
- BYTEAT(PC, TD1) \
- add.b Y, TD1
-
- #define INDX \
- moveq #0, TD2 \
- BYTEAT(PC, TD2) \
- add.b X, TD2 \
- moveq #0, TD1 \
- WORDAT(TD2, TD1)
-
- #define INDY \
- moveq #0, TD2 \
- BYTEAT(PC, TD2) \
- moveq #0, TD1 \
- WORDAT(TD2, TD1) \
- add.w Y, TD1
-
- #define ABS \
- moveq #0, TD1 \
- WORDAT(PC, TD1)
-
- #define ABSX \
- moveq #0, TD1 \
- WORDAT(PC, TD1) \
- add.w X, TD1
-
- #define ABSY \
- moveq #0, TD1 \
- WORDAT(PC, TD1) \
- add.w Y, TD1
-
- Test68k()
- {
- unsigned long store68A[5], store68D[8];
- word addrOld, addrNew;
- Str255 str;
-
- asm {
- movem.l a0-a4, store68A
- movem.l d0-d7, store68D
-
- move.l memory, a1
- move.l #0x0001, PC
- BYTEAT(PC, TD1)
- move.w TD1, addrNew
-
- movem.l store68D, d0-d7
- movem.l store68A, a0-a4
- }
- NumToString(addrNew, str);
- DebugStr(str);
- pc=0x0123;
- addrOld=ByteAt(0x0001);
- NumToString(addrOld, str);
- DebugStr(str);
- if (addrOld!=addrNew) DebugStr("\pBOOM");
- }